import Vue from 'vue'
import axios from 'axios'
import common from './common.js'
import md5 from './md5.js'
import cookie from './cookie'
import Qs from 'qs'
/** axios请求拦截器**/
axios.interceptors.request.use(config => {
  // Mint.Indicator.open({//打开loading
  //   text: '加载中...',
  //   spinnerType: 'fading-circle'
  // });
  return config
}, error => {
  return Promise.reject(error)
})
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
//axios 响应拦截器
axios.interceptors.response.use(response => {
  // Mint.Indicator.close();//关闭loading
  return response
}, error => {
  return Promise.resolve(error)
})

/**
 * 请求发出后检查返回的状态码,统一捕获正确和错误的状态码，正确就直接返回response,错误就自定义一个返回对象
 * @param {object} response 响应对象
 * @return {object} 响应正常就返回响应数据否则返回错误信息
 **/
function checkStatus (response) {
  // 如果状态码正常就直接返回数据,这里的状态码是http响应状态码有400，500等，不是后端自定义的状态码
  if (response && ((response.status === 200 || response.status === 304 || response.status === 400))) {
    return response.data // 直接返回http response响应的data,此data会后端返回的数据数据对象，包含后端自定义的code,message,data属性
  }
  return { // 自定义网络异常对象
    code: '404',
    message: '网络异常'
  }
}

export default {
  post (url, data) {
    data.str = md5.state.getStr()
    data.signature= md5.state.getSignature()
    data.token = cookie.getCookie('token')
    return axios({
      method: 'post',
      baseURL: common.state.baseUrl,
      url: url,
      data: Qs.stringify(data),
      timeout: 10000,
      dataType: 'jsonp'
    }).then((res) => {
      return checkStatus(res)
    }).catch((res)=>{
      console.log(res)
    })
  },
  get (url, params) {
    return axios({
      method: 'get',
      baseURL: common.state.baseUrl,
      url,
      params,
      timeout: 10000,
    }).then(
      (response) => {
        return checkStatus(response)
      }
    )
  }

}
